package com.webauto.selenium;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;

import com.webauto.log.Log;
import com.webauto.test_case.BaseCase;

/**
 * PS:切换元素工具类
 * @author lkk
 *
 */
public class SwitchUtil {
	/**
	 *PS: 通过name或者Id切换frame;
	 * @param nameOrId name或者id信息
	 */
	public static void switchToFrameByNameOrId(String nameOrId) {
		try {
			BaseCase.driver.switchTo().frame(nameOrId);
		}catch(Exception e) {
			Log.error("+++通过name或者id切换frame失败,nameOrId:"+nameOrId+"+++");
		}
		
	}
	
	/**
	 * PS:通过索引切换frame
	 * @param index 索引值
	 */
	public static void switchToFrameByIndex(String index) {
		try {
			BaseCase.driver.switchTo().frame(index);
		}catch(Exception e) {
			Log.error("+++通过索引切换frame失败,index:"+index+"+++");
		}
	}
	
	/**
	 * PS:通过元素对象切换frame
	 * @param frameElement 元素对象 
	 */
	public static void switchToFrameByElement(WebElement frameElement) {
		try {
			BaseCase.driver.switchTo().frame(frameElement);
		}catch(Exception e) {
			Log.error("+++通过元素切换frame失败+++");
		}
	}
	
	/**
	 * PS:通过By对象切换frame
	 * @param by 位置对象
	 */
	public static void switchToFrameByBy(By by) {
		WebElement frameElement = FindElementUtil.waitFindElementForPageLoad(by);
		try {
			BaseCase.driver.switchTo().frame(frameElement);
		}catch(Exception e) {
			Log.error("+++通过位置对象切换frame失败+++");
		}
	}
	
	/**
	 * PS:返回上一级frame
	 */
	public static void switchToFrameByParent() { 
		try {
			BaseCase.driver.switchTo().parentFrame();
		}catch(Exception e) {
			Log.error("+++返回父级frame失败+++");
		}
	}
	
	/**
	 * PS:返回最外层frame
	 */
	public static void switchToFrameByDefault() { 
		try {
			BaseCase.driver.switchTo().defaultContent();
		}catch(Exception e) {
			Log.error("+++返回最外层frame失败+++");
		}
	}
	
	/**
	 * PS:切换到当前页面的alert窗口
	 */
	public static void switchToAlert() {
		try {
			BaseCase.driver.switchTo().alert();
		}catch(Exception e) {
			Log.error("+++切换alert窗口失败+++");
		}
	}
	
	/**
	 * PS:切换窗口
	 * @param nameOrHandle 窗口句柄
	 */
	public static void switchToWindow(String nameOrHandle) {
		try {
			BaseCase.driver.switchTo().window(nameOrHandle);
		}catch(Exception e) {
			Log.error("+++通过窗口句柄切换浏览器窗口失败,nameOrHandle:"+nameOrHandle+"+++");
		}
	}
}
